Q1.由昨天的結果可看出租借時間大多在一小時內。進一步了解租借起站最多的是哪幾站?
使用groupby()搭配count()來計算筆數。
a=df1[mask & mask_1].groupby('start_station_name').count()
a=a.sort_values('start_station_id',ascending=False)
a.head()
##
ride_id ... day_of_the_week
start_station_name ...
Canal St & Adams St 7752 ... 7752
Clinton St & Madison St 6712 ... 6712
Clinton St & Washington Blvd 5876 ... 5876
Kingsbury St & Kinzie St 4575 ... 4575
Columbus Dr & Randolph St 4309 ... 4309
[5 rows x 14 columns]
可以看到 Canal St & Adams St 是三個月租借次數最多的站,放在 Google Map 上搜尋,才了解原來附近有一個Chicago Union Station,是交通的樞紐。而另外四個站點: Clinton St & Madison St 位於第一名的下一站,附近有學校;Clinton St & Washington Blvd 附近也有一個車站;Kingsbury St & Kinzie St附近有 Kinzie Street Bridge;Columbus Dr & Randolph St 附近有 Millennium Park 等景點。
(總而言之是在熱區就是了)
因為這樣,我也很好奇後五筆分別是哪些站點,用df.tail()來看看~
a.tail()
##
ride_id rideable_type ... ride_length day_of_the_week
start_station_name ...
Kostner Ave & Lake St 1 1 ... 1 1
May St & 69th St 1 1 ... 1 1
Cicero Ave & Lake St 1 1 ... 1 1
Carpenter St & 63rd St 1 1 ... 1 1
Bennett Ave & 79th St 1 1 ... 1 1
[5 rows x 14 columns]
放到地圖上觀察,發現有一站是在地鐵站與站之間,共同點則是離市區有一段距離。
Q2. 昨天找出了租借少於1分鐘的筆數,發現沒有重複資料。進一步來看同一天、同一組ID是否有再租借的紀錄。
mask=df1[df1['ride_length']<'00:01:00']
mask['ride_id'].nunique()
##
ride_id 7555
rideable_type 1
started_at 5318
ended_at 5320
start_station_name 462
start_station_id 462
end_station_name 463
end_station_id 463
start_lat 402
start_lng 381
end_lat 402
end_lng 381
member_casual 2
ride_length 60
day_of_the_week 7
dtype: int64
原本想照下面這樣寫,結果發現出現錯誤訊息,查詢後發現是應該是我寫的不清楚導致無法比對。
不過順便可以來介紹一下strftime()這個函數,他可以datetime的資料轉換為字串日期形式,詳請可參考Python官方文件。
mask_5=(df1['ride_length']>='00:01:00')
df1[mask_5]
for i in range(len(df1[mask]['ride_id'])):
if (df1[mask_5]['ride_id']==df1[mask]['ride_id']) & (df1[mask_5]['started_at'][i].strftime('%Y-%m-%d')==df1[mask]['started_at'][i].strftime('%Y-%m-%d')):
print(df1[mask]['ride_id'])
print(df1[mask['member_casual']])
ValueError: Can only compare identically-labeled Series objects
稍微改了一下程式但還是跑不出來(懷疑自己又陷入了無限迴圈?但是自己測試的小程式明明可以跑的)
for i in df1[mask]['ride_id']:
for j in df1[mask_5]['ride_id']:
if i == j:
print('進行中')
print(i)
發表文章的幾分鐘後結果就出來了,如下:
進行中
3.61E+15
居然...只有一筆!! 那可能真的是操作錯誤,或突然不想騎了(?)...XDD
大概分析完租借長度後,接著要進入與使用者(會員/非會員)有關的部分,也是本次很重點的一個環節。此階段目標大該如下所列,大部分會留到明天來挑戰解答。:)
明天見!